package com.fingard.dsp.bank.directbank.cmbc02;

import com.alibaba.fastjson.JSON;
import com.fingard.constant.Format;
import com.fingard.dsp.bank.directConfig.ActSetItem;
import com.fingard.dsp.bank.directbank.bankInterface.IAuthorizeForRec;
import com.fingard.dsp.bank.reqrespobj.authforrec.*;
import com.fingard.dsp.bank.reqrespobj.authforrec.detail.RetAtsQryAuthForRecDetail;
import com.fingard.io.FileHelper;
import com.fingard.text.StringHelper;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class CMBC02AuthorizeForRec extends CMBC02Base implements IAuthorizeForRec{

	@Override
	public RetAtsAuthForRec d_auth(ReqAuthForRec p_req) throws Exception {
		// TODO Auto-generated method stub
		//白名单交易处理
		RetAtsAuthForRec retAts = new RetAtsAuthForRec(p_req.reqHeader);
		StringBuilder sbFileContent = new StringBuilder();
		try{
			ActSetItem actItem = getBankConfig().getActSetItem(p_req.ownAct, "");
			if(actItem== null) {
				retAts.respCode = "-1";
				retAts.respInfo = "未找到账号[" + p_req.ownAct + "]商户配置信息!";
				retAts.writeRetToATS();
				return retAts;
			}
			String ownActReqSeq = getDataFileDirectory(new Date()) + File.separator + "authAct" + File.separator + p_req.reqSeqID + ".txt";


			StringBuilder sb = new StringBuilder();
			sb.append(p_req.ownAct).append("\n");
			//组装发送给银行的请求报文
			String version="v1.0";//版本号	version	String	16	Y	v1.0，版本号，用于版本控制、灰度发布、向下兼容等用途
			String source="PC";//发起来源	source	String	16	Y	"发起渠道，用于标识iOS、Android、PC等的渠道管控及版本控制PC-PC Web端；iOS-苹果客户端；Android-安卓客户端；"
			String merchantNum=actItem.merchantId;//商户编号	merchantNum	String	32	Y	统一商户编号，由民生银行提供的统一商户编号
//			String merchantSeq=genMerchantSeq(merchantNum);//商户流水	merchantSeq	String	50	Y	商户发起交易时使用的流水，为防止与其他交易系统流水号重复，特定义流水号组成规则如下：字母、数字、下划线，长度须为50位。 以商户编号为前缀，需补齐后总长度50位
			Date timeNow=new Date();
			String transDate=Format.Date8Format.format(timeNow);//交易日期	transDate	String	8	Y	yyyyMMdd
			String transTime=Format.Time9Format.format(timeNow);//交易时间	transTime	String	9	Y	HHMMSSsss
			String transCode="PAY_T003";//交易编码	transCode	String	16	Y	交易编码
			String securityType = "SM203";//安全类型	securityType	String	16	Y	决定使用何种证书、签名、加密算法
			String reserve1 = "";//备用字段1	reserve1	String	16	N	一般备用字段
			String reserve2 = "";//备用字段2	reserve2	String	32	N	一般备用字段
			String reserve3 = "";//备用字段3	reserve3	String	64	N	一般备用字段
			String reserve4 = "";//备用字段4	reserve4	String	128	N	一般备用字段
			String reserve5 = "";//备用字段5	reserve5	String	256	N	一般备用字段
			String reserveJson = "";//通用备用字段	reserveJson	String	512	N	Json格式的通用备用字段｛tokenId：1223232｝在web生命周期管理,在APP端与密钥一一对应
			//业务报文	businessContext	String	4096	N	传递给业务系统的报文
	
		//组装请求报文
		String idnum=p_req.totalNum;//S|提条数|				必输项	
		int num=1;
		String idx;//编号	idx	String	20	必输项	
			String inaterContractId;//二级签约编号	inaterContractId	String	32	必输项	为其自己新增代收白名单时，填写自己的签约编码，为二级商户新增白名单时，填写二级商户的签约编码。签约编码均为民生银行下发。
		String flag;//操作标志	flag	String	1	必输项	I：新增；U：修改
		String draweeAccNo;//付款人帐号	draweeAccNo	String	40	必输项	不可修改
		String draweeAccName;//付款人名称	draweeAccName	String	146	必输项	
		String draweePartyId;//付款账户开户行	draweePartyId	String	30	必输项	使用人行12位行号，付款账户是民生银行时，固定填写305100000013
		String payeeAccNo;//收款人账号	payeeAccNo	String	40	必输项	
		String payeeAccName;//收款人名称	payeeAccName	String	146	必输项	
		String payeePartyId;//收款账户开户行	payeePartyId	String	30	非必输项	
		String certType;//证件类型	certType	String	6	必输项
		String certNo;//证件号码	certNo	String	60	必输项	
		String phoneId;//电话号码	phoneId	String	30	非必输项	
		String startDate;//开始日期	startDate	String	8	必输项	
		String endDate;//结束日期	endDate	String	8	必输项	
		String ctrlFlag="11";//黑白名单类型	ctrlFlag	String	2	必输项	固定填：11
		String stat;//状态	stat	String	1	必输项	1.启用  2.注销
		String chkType="3";//校验类型	chkType	String	1	必输项	固定填：3
		String limitAmt;//限额	limitAmt	String	16	必输项	
		String acctType;//付款账户类型	acctType	String	1	必输项	0-对公 1-卡 2-折
		String protocolId;//客户协议编号	protocolId	String	16	条件	操作标志必=U时，必输项
			//E|
		
		//组装报文头
		sbFileContent.append("S").append("|");
		sbFileContent.append(idnum).append("|");
		sbFileContent.append("^");//换行
		WriteBankLogLn("组装的报文头："+sbFileContent.toString());
		while(p_req.readRecord()){

			inaterContractId=actItem.getBusCode("auth");//二级签约编号	inaterContractId	String	32	必输项	为其自己新增代收白名单时，填写自己的签约编码，为二级商户新增白名单时，填写二级商户的签约编码。签约编码均为民生银行下发。
			flag="I";//操作标志	flag	String	1	必输项	I：新增；U：修改
			draweeAccNo=p_req.readedDetail.oppAct;//付款人帐号	draweeAccNo	String	40	必输项	不可修改
			draweeAccName=p_req.readedDetail.oppActName;//付款人名称	draweeAccName	String	146	必输项	
			if("1".equals(p_req.readedDetail.sameBnk)){
				draweePartyId="305100000013";
			}
			else{
			draweePartyId=p_req.readedDetail.cnapsCode;//付款账户开户行	draweePartyId	String	30	必输项	使用人行12位行号，付款账户是民生银行时，固定填写305100000013
			}
			payeeAccNo=p_req.ownAct;//收款人账号	payeeAccNo	String	40	必输项
			payeeAccName=p_req.ownActName;//收款人名称	payeeAccName	String	146	必输项
			payeePartyId="";//收款账户开户行	payeePartyId	String	30	非必输项	
			
			certType=convertCertTypeToBank(p_req.readedDetail.certType);//证件类型	certType	String	6	必输项
			certNo=p_req.readedDetail.certNum;//证件号码	certNo	String	60	必输项	
			phoneId="";//电话号码	phoneId	String	30	非必输项	
			Date dateNow=new Date();
			startDate=Format.Date8Format.format(dateNow);//开始日期	startDate	String	8	必输项	
			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
			
			endDate=Format.Date8Format.format(sf.parse(p_req.readedDetail.deadLine));//结束日期	endDate	String	8	必输项	
			if (StringHelper.isNullOrEmpty(endDate)) {
				endDate = getBankConfig().getValueAsString("deadLine");
			}
			ctrlFlag="11";//黑白名单类型	ctrlFlag	String	2	必输项	固定填：11
			stat="1";//状态	stat	String	1	必输项	1.启用  2.注销
			chkType="3";//校验类型	chkType	String	1	必输项	固定填：3
			limitAmt=getBankConfig().getValueAsString("limitAmt");//限额	limitAmt	String	16	必输项	
			String cardtype=p_req.readedDetail.cardType;//付款账户类型	acctType	String	1	必输项	0-对公 1-卡 2-折
			if("1".equals(cardtype)){
				acctType="2";	
			}
			else if("2".equals(cardtype)){
				acctType="1";
			}
			else{
				acctType="0";
			}

			protocolId="";
			sbFileContent.append(num).append("|");
			sbFileContent.append(inaterContractId).append("|");
			sbFileContent.append(flag).append("|");
			sbFileContent.append(draweeAccNo).append("|");
			sbFileContent.append(draweeAccName).append("|");
			sbFileContent.append(draweePartyId).append("|");
			sbFileContent.append(payeeAccNo).append("|");
			sbFileContent.append(payeeAccName).append("|");
			sbFileContent.append(payeePartyId).append("|");
			sbFileContent.append(certType).append("|");
			sbFileContent.append(certNo).append("|");
			sbFileContent.append(phoneId).append("|");
			sbFileContent.append(startDate).append("|");
			sbFileContent.append(endDate).append("|");
			sbFileContent.append(ctrlFlag).append("|");
			sbFileContent.append(stat).append("|");
			sbFileContent.append(chkType).append("|");
			sbFileContent.append(limitAmt).append("|");
			sbFileContent.append(acctType).append("|");
			sbFileContent.append(protocolId).append("|");

			sbFileContent.append("^");//换行
			sb.append(p_req.readedDetail.authCode).append("\n");
			num++;
		}

		sbFileContent.append("E").append("|");

			FileHelper.writeFile(new File(ownActReqSeq), sb.toString(), getCharset());
			WriteBankLogLn("authcode映射文件："+sb.toString());

		WriteBankLogLn("组装好的报文："+sbFileContent.toString());


		//reqSeqId----ownAct

		/*//Base64加密
		String fileContent=new String(Base64.encodeBase64(sbFileContent.toString().getBytes("UTF-8")));
		WriteBankLogLn("经过Base64加密后赋值给fileContent的报文："+fileContent);*/
		
		//组装业务报文
		
		String defaultTradeType="30010001";//交易子类型	defaultTradeType	String	16	Y	根据申请产品参考“商户指引”填写，例如：30010001
		String contractId=actItem.getBusCode("auth");//签约编码	contractId	String	32	Y	民生银行下发给商户的签约编码，不同交易子类型的签约编码不同
		String contentCount=p_req.totalNum;//总笔数	contentCount	String	22	Y	文件中的总笔数，需与文件中的一致
		//文件内容	fileContent	String			txt文本以Base64编码的方式传输，中文的编码方式为UTF-8。限定批量条数，最多1000条
		String reqReserved="";//请求方保留域	reqReserved	String	256	N	
		String riskRateInfo="";//风险信息域	riskRateInfo	String	256	N	
		String userMac="";//终端信息域	userMac	String	256	N	
		String reserved="";//保留域	reserved	String	256	N	
		
	
		
		
		
		
		//发送给银行的报文
		

		Map<String,String> messagetoBank=new HashMap<String, String>();
		messagetoBank.put("version", version);
		messagetoBank.put("source", source);
		messagetoBank.put("merchantNum", merchantNum);
		messagetoBank.put("merchantSeq", p_req.reqSeqID);
		messagetoBank.put("transDate", transDate);
		messagetoBank.put("transTime", transTime);
		messagetoBank.put("transCode", transCode);
		messagetoBank.put("securityType", securityType);
		messagetoBank.put("reserve1", reserve1);
		messagetoBank.put("reserve2", reserve2);
		messagetoBank.put("reserve3", reserve3);
		messagetoBank.put("reserve4", reserve4);
		messagetoBank.put("reserve5", reserve5);
		messagetoBank.put("reserveJson", reserveJson);
	/*	messagetoBank.put("businessContext", businessContext);*/
		messagetoBank.put("defaultTradeType", defaultTradeType);
		messagetoBank.put("contractId", contractId);
		messagetoBank.put("contentCount", contentCount);
		messagetoBank.put("fileContentStr", sbFileContent.toString());
		messagetoBank.put("reqReserved", reqReserved);
		messagetoBank.put("riskRateInfo", riskRateInfo);
		messagetoBank.put("userMac", userMac);
		messagetoBank.put("reserved", reserved);
		
		
		Map<String, String> submitMap = new HashMap<String, String>();
		Map<String, String> busiMap = new HashMap<String, String>();

		initFileContent(messagetoBank);
		splidReqMap(messagetoBank, submitMap, busiMap);
		submitMap.put("businessContext", encodeMsgToString(p_req.ownAct, busiMap));

		
		String message=submitMap.toString();
		WriteBankLogLn("发送给银行的报文："+message);
		
		String tmpUrl=bankFront.getUrl("Pay");
		String[] tmpStrRet = sendToBank(submitMap,tmpUrl);
		if(tmpStrRet[0].length()==0){
			WriteBankLogLn("银行返回的报文："+tmpStrRet[1]);
			//解析银行报文
			Map<String, String> reMap  = (Map<String, String>) JSON.parse(tmpStrRet[1].toString());
			WriteBankLogLn("解析后银行返回的报文map形式："+reMap);
			WriteBankLogLn("解析后银行返回的报文："+reMap.toString());
			String gateReturnType=reMap.get("gateReturnType");
			String code=reMap.get("gateReturnCode");
			String respInfo=reMap.get("gateReturnMessage");
			if("S".equals(gateReturnType)){
				
				String returnMessage=reMap.get("businessContext");
				WriteBankLogLn("银行返回报文中的businessContext："+returnMessage);
				
				//解密验签
				String returnbody=decodeMsgToString(p_req.ownAct, returnMessage);
				WriteBankLogLn("解密结果："+returnbody);
			/*	
				//解Base64编码
				 String decipher=base64ToString(returnbody);
				 WriteBankLogLn("解Base64编码结果"+decipher);*/
			
				 
				Map<String, String> str  = (Map<String, String>) JSON.parse(returnbody.toString());
								
				 String busiType=str.get("busiType");
				 String busiCode=str.get("busiCode");
				 String busiMsg=str.get("busiMsg");
				 if("S".equals(busiType)){
					 retAts.respCode="0";
					 retAts.respInfo=busiMsg;
					 retAts.retMsg=busiCode;
					 retAts.retCode="0";
					 retAts.serialNo=p_req.reqSeqID;
				 }
				 else if("R".equals(busiType)){
					 retAts.respCode="0";
					 retAts.respInfo=busiMsg;
					 retAts.retMsg=busiCode;
					 retAts.retCode="2";
				 }
				 else{
					 retAts.respCode="-1";
					 retAts.respInfo=busiMsg;
					 retAts.retCode="1";
					 retAts.retMsg=busiCode;
				 }
				
				
			}
			else if("R".equals(gateReturnType)){
				retAts.respCode="0";
				retAts.respInfo=respInfo;
				retAts.retCode="2";
				retAts.retMsg="To be checked out";
			}
			else{
				retAts.respCode="-1";
				retAts.respInfo=respInfo;
				retAts.retCode="1";
				retAts.retCode=respInfo;
			}
		}
		else {
            retAts.respCode = "-1";
            retAts.respInfo = tmpStrRet[1];
        }
						
		}
		catch(Exception e){
			retAts.respCode="-1";
			retAts.respInfo=e.getMessage();
			WriteBankLogLn(e);
		}
		 
         retAts.writeRetToATS();
         return retAts;
	}

	
	//白名单查询
	@Override
	public RetAtsQryAuthForRec d_qry_auth(ReqQryAuthForRec p_req) throws Exception {
		// TODO Auto-generated method stub
		RetAtsQryAuthForRec retAts = new RetAtsQryAuthForRec(p_req.reqHeader);

		retAts.writeStart();
		 StringBuilder sbFileContent = new StringBuilder();
		try {
			String ownActReqSeq = "";
			//reqSeqId----ownAct
			String content = "";
			long oneDayTimeMillis = 24 * 60 * 60 * 1000;
			//查找七天内的本地授权文件
			for (int x = 0; x < 7; x++) {
				 ownActReqSeq = getDataFileDirectory(new Date(System.currentTimeMillis()-oneDayTimeMillis*x)) + File.separator + "authAct" + File.separator + p_req.reqSeqID + ".txt";
				content = FileHelper.readFileText(ownActReqSeq, getCharset());
				if (content != null && !"".equals(content)) {
					break;
				}
			}
			if (content == null || "".equals(content)) {
				retAts.respCode = "-1";
				retAts.respInfo = "本地授权映射文件不存在。请重新发起授权";
				retAts.writeAfterDetail();
				return retAts;
			}
			String[] contents = content.split("\n");
			ActSetItem actItem = getBankConfig().getActSetItem(contents[0], "");

			if(actItem== null) {
				retAts.respCode = "-1";
				retAts.respInfo = "未找到账号[" + contents[0] + "]商户配置信息!";
				retAts.writeAfterDetail();
				return retAts;
			}
			//组织发送给银行的请求报文
			String version="v1.0";//版本号	version	String	16	Y	v1.0，版本号，用于版本控制、灰度发布、向下兼容等用途
			String source="PC";//发起来源	source	String	16	Y	"发起渠道，用于标识iOS、Android、PC等的渠道管控及版本控制PC-PC Web端；iOS-苹果客户端；Android-安卓客户端；"
			String merchantNum=actItem.merchantId;//商户编号	merchantNum	String	32	Y	统一商户编号，由民生银行提供的统一商户编号
			String merchantSeq=genMerchantSeq(merchantNum);//商户流水	merchantSeq	String	50	Y	商户发起交易时使用的流水，为防止与其他交易系统流水号重复，特定义流水号组成规则如下：字母、数字、下划线，长度须为50位。 以商户编号为前缀，需补齐后总长度50位
			Date timeNow=new Date();
			String transDate=Format.Date8Format.format(timeNow);//交易日期	transDate	String	8	Y	yyyyMMdd
			String transTime=Format.Time9Format.format(timeNow);//交易时间	transTime	String	9	Y	HHMMSSsss
			String transCode="PAY_Q003";//交易编码	transCode	String	16	Y	交易编码
			String securityType = "SM203";//安全类型	securityType	String	16	Y	决定使用何种证书、签名、加密算法
			String reserve1 = "";//备用字段1	reserve1	String	16	N	一般备用字段
			String reserve2 = "";//备用字段2	reserve2	String	32	N	一般备用字段
			String reserve3 = "";//备用字段3	reserve3	String	64	N	一般备用字段
			String reserve4 = "";//备用字段4	reserve4	String	128	N	一般备用字段
			String reserve5 = "";//备用字段5	reserve5	String	256	N	一般备用字段
			String reserveJson = "";//通用备用字段	reserveJson	String	512	N	Json格式的通用备用字段｛tokenId：1223232｝在web生命周期管理,在APP端与密钥一一对应
			//业务报文	businessContext	String	4096	N	传递给业务系统的报文
			
			//组织业务报文
			String defaultTradeType="30010001";//交易子类型	defaultTradeType	String	16	Y	根据申请产品参考“商户指引”填写，例如：30010001
			String contractId = actItem.getBusCode("auth");//签约编码	contractId	String	32	Y	民生银行下发给商户的签约编码，不同交易子类型的签约编码不同
			String orgMerchantSeq=p_req.reqSeqID;//原交易商户流水	orgMerchantSeq	String	64	Y	原批量交易商户流水
			String reserved="";//保留域	reserved	String	256	N	
		/*	
			JSONObject businessMessage = new JSONObject();
			businessMessage.put("defaultTradeType", defaultTradeType);
			businessMessage.put("contractId", contractId);
			businessMessage.put("orgMerchantSeq", orgMerchantSeq);
			businessMessage.put("reserved", reserved);
			
			
			//将业务报文以json的形式存入businessContext，对业务报文进行加签，然后body+sign组成businessContext
			String body=JSON.toJSONString(businessMessage);
			WriteBankLogLn("businessContext未加签加密的报文"+body);
			String businessContext=encodeMsgToString(merchantNum, body);
			WriteBankLogLn("加签加密后存放在businessContext的报文"+businessContext);*/
			
			
			
			//发送给银行的报文

			Map<String,String> messagetoBank=new HashMap<String, String>();
			messagetoBank.put("version", version);
			messagetoBank.put("source", source);
			messagetoBank.put("merchantNum", merchantNum);
			messagetoBank.put("merchantSeq", merchantSeq);
			messagetoBank.put("transDate", transDate);
			messagetoBank.put("transTime", transTime);
			messagetoBank.put("transCode", transCode);
			messagetoBank.put("securityType", securityType);
			messagetoBank.put("reserve1", reserve1);
			messagetoBank.put("reserve2", reserve2);
			messagetoBank.put("reserve3", reserve3);
			messagetoBank.put("reserve4", reserve4);
			messagetoBank.put("reserve5", reserve5);
			messagetoBank.put("reserveJson", reserveJson);
			/*messagetoBank.put("businessContext", businessContext);*/
			messagetoBank.put("defaultTradeType", defaultTradeType);
			messagetoBank.put("contractId", contractId);
			messagetoBank.put("orgMerchantSeq", orgMerchantSeq);
			messagetoBank.put("reserved", reserved);
			
			
			
			Map<String, String> submitMap = new HashMap<String, String>();
			Map<String, String> busiMap = new HashMap<String, String>();

			
			splidReqMap(messagetoBank, submitMap, busiMap);
			submitMap.put("businessContext", encodeMsgToString(contents[0], busiMap));
			
			
			String message=submitMap.toString();
			WriteBankLogLn("发送给银行的报文："+message);
			
			String tmpUrl=bankFront.getUrl("Query");
			String[] tmpStrRet = sendToBank(submitMap,tmpUrl);
			
			if(tmpStrRet[0].length()==0){
				WriteBankLogLn("银行返回的报文："+tmpStrRet[1]);
				//解析银行报文
				Map<String, String> reMap  = (Map<String, String>) JSON.parse(tmpStrRet[1].toString());
				WriteBankLogLn("解析后银行返回的报文map形式："+reMap);
				WriteBankLogLn("解析后银行返回的报文："+reMap.toString());
				String gateReturnType=reMap.get("gateReturnType");
				String code=reMap.get("gateReturnCode");
				String respInfo=reMap.get("gateReturnMessage");
				if("S".equals(gateReturnType)){
					String returnMessage=reMap.get("businessContext");
					WriteBankLogLn("银行返回报文中的businessContext："+returnMessage);
					
					//解密验签
					String returnbody=decodeMsgToString(contents[0], returnMessage);
					WriteBankLogLn("解密结果："+returnbody);


					Map<String, String> str  = (Map<String, String>) JSON.parse(returnbody.toString());
						
					 String busiType=str.get("busiType");
					 String busiCode=str.get("busiCode");
					 String busiMsg=str.get("busiMsg");
					String contractid = str.get("contractId");
					 if("S".equals(busiType)){
						 //将fileContent Base64解密
						 String fileContent=str.get("fileContent");
						 WriteBankLogLn("返回信息中的fileContent未解密之前的报文："+fileContent);
						//解Base64编码
						 String fileContentstr=base64ToString(fileContent);
						 WriteBankLogLn("解Base64编码结果"+fileContentstr);
						 retAts.respCode="0";
						 retAts.respInfo=busiMsg;
						//将解密后的文件进行分解
						//解析返回文件的数据
						String[] totalLine = fileContentstr.split("\n");
						retAts.reqSeqID=p_req.reqSeqID;
						 for(int i=1;i<totalLine.length-1;i++){
							 RetAtsQryAuthForRecDetail tmpDetail = new RetAtsQryAuthForRecDetail();
							 String[] transbody=totalLine[i].split("\\|",-1);
							 String tmpResult=transbody[1];
							 tmpDetail.oppAct=transbody[4];
							 tmpDetail.oppActName=transbody[5];
							 if (i < contents.length) {
								 tmpDetail.iSeqno = contents[i];
							 } else {
								 retAts.respCode="-1";
								 retAts.respInfo="银行返回字段与Authcode映射文件内容不匹配,,请联系开发人员";
							 }
							 tmpDetail.payInfo = transbody[2]; //成功失败信息
							 tmpDetail.contractNo = contractid;
							 tmpDetail.authCode = transbody[10]; //客户协议编号
							 if ("S".equals(tmpResult) || ("E".equals(tmpResult) && "客户已签约".equalsIgnoreCase(transbody[2]))) {
								 tmpDetail.transState = "2";
							 } else if ("E".equals(tmpResult)) {
								 tmpDetail.transState = "3";
							 } else {
								 tmpDetail.transState = "4";
							 }
							 tmpDetail.payCode =busiCode+"+"+ tmpResult;
							 retAts.writeRetDetail(tmpDetail);
						 }
					 } else if("R".equals(busiType)){
						 retAts.respCode="0";
						 retAts.respInfo=respInfo;
						 retAts.transState=code;
						 retAts.payInfoCode=code;
					 }
					 else{
						 retAts.respCode="-1";
						 retAts.respInfo=busiMsg;
						 retAts.payInfoCode=busiCode;
						 retAts.transState=busiCode;
					 }
					
					
				}
				else if("R".equals(gateReturnType)){
					retAts.respCode="0";
					retAts.respInfo=respInfo;
					retAts.transState=code;
					retAts.payInfoCode=code;
				}
				else{
					retAts.respCode="-1";
					retAts.respInfo=respInfo;
							
				}
			}
			else{
				 retAts.respCode = "-1";
		         retAts.respInfo = tmpStrRet[1];
			}
			
							
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
			retAts.respCode="-1";
			retAts.respInfo=e.getMessage();
			WriteBankLogLn(e);
		}
		retAts.writeAfterDetail();
		return retAts;
	}

	@Override
	public RetAtsQryRecAuthInfo d_qry_authInfo(ReqQryRecAuthInfo p_req) throws Exception {
		// TODO Auto-generated method stub
		
		return null;
	}

}
